CTF題目的解法有非常多種,可以先試著自己解看看,解出來後可以再看看別人怎麼解,這樣練習可以很好的訓練自己利用不同的思維來解題,我們就來進行今天的題目吧~
直接nc 2018shell.picoctf.com 31711
題目給了一串2進位的數字要我們轉成單字,這裡推薦一個很實用的進位轉換的網站
https://www.asciitohex.com/
直接把數字複製下來貼上去轉換,接下來又有第二題給的是16進位的數字,然後程式就中止了,因為題目有時間限制,這題的確是可以靠手速解出來,不過提示有說到,大概就是python是個很好個工具,我們就用python解看看吧
這邊會使用到一個python library叫做 pwntools
,他是一個很強大的library,他的詳細使用方法請參考文件,pwntools
這邊直接貼上程式碼
#!/usr/bin/env python
from pwn import *
l = remote('2018shell.picoctf.com',31711) #相當於nc 2018shell.picoctf.com 31711
l.recvuntil('stored')
# 第一個問題 binary->ascii
l.recvuntil(' the ')
binary = hex(int(l.recvuntil('as ')[:-3].replace(' ',''),2))[2:].decode('hex')
l.recv()
l.sendline(binary)
#第二個問題 hexadecimal->ascii
l.recvuntil(' the ')
hexadecimal = l.recvuntil('as ')[:-3]
l.recv()
l.sendline(hexadecimal.strip().decode('hex'))
#第三個問題 octal->ascii
l.recvuntil(' the ')
octal = l.recvuntil('as ')[:-3]
octal = ''.join([chr(int(i,8)) for i in octal.split()])
l.recv()
l.sendline(octal)
# Flag
print l.recv()
先把題目前面的廢話利用recvuntil()
讀到要轉換的數字前,再把數字讀進來做進位轉換的處理,透過sendline將答案傳給server,這樣一來就不用練手速解的那麼辛苦啦~
$ ./solve.py
[+] Opening connection to 2018shell.picoctf.com on port 31711: Done
You got it! You're super quick!
Flag: picoCTF{delusions_about_finding_values_68051dea}
[*] Closed connection to 2018shell.picoctf.com port 31711
python在CTF中非常實用,他簡潔的語法可以為解題速度帶來很大的提昇
這題要到shell server做,一樣直接cd
到題目給的位子,進到裡面就養成好習慣先ls
看看有什麼,
但是ls
出來並沒有東西,這時我們利用前幾天講過的ls -al
可以看到一個可疑的 . 這個.與當前目錄的 . 是不一樣的,但是我們要對他下什麼指令他會認為是對當前目錄所以都不行
這邊突然靈光一閃,想到一個很奇葩的方法,我用鼠標將他從最前面一格一格反白,竟然發現他的名稱其實是, . 後面接上兩個空白,所以就直接 cat
就可以找到Flag啦
$ cat ". "
picoCTF{j0hn_c3na_paparapaaaaaaa_paparapaaaaaa_22f627d9}
這個Flag好像有聲音!?
題目說你可以用stdin,stdout,stderr找到Flag嗎?
這裡會用到Linux的標準輸出入重新導向,還記得昨天有一題有使用到 echo '剛剛複製的內容' > authorized_keys
當中的 > 就是將echo的輸出導向至authorized_keys這個文件
進到資料夾後裡面有一個 in-out-error的檔案,先執行他看看
他叫我們輸入 Please may I have the flag? 輸入後他出現了一堆我們看不懂的東西,不過既然提示說可以把stdout與stderr分開
這裡可以使用 ./in-out-error 1>/dev/null
其中裡面的1可以換成2試試看,會看到不一樣的東西唷
這邊也介紹一下 /dev/null
是 Linux 系統的空裝置,所有寫入這個檔案的資料都會被丟棄,從這裡讀入的檔案會得到EOF,就像是一個黑洞的概念
因為題目有要求輸入一串字所以這邊可以再用到pipe的概念echo "Please may I have the flag?" | ./in-out-error 1>/dev/null
就可以得到很多很多的Flag picoCTF{p1p1ng_1S_4_7h1ng_b6f5a788}
今天的題目稍微有比較難一點,也開始進入到2顆星的題目,General Skill的部份大概在兩天就會介紹完,再來就要往其他的領域探索囉~